#include <cstdio>
const int MAXN = 401;
//int sum, facsum;
int N, K, P;
int max;//记录最大的因子
int maxfacsum = -1;
int ans[MAXN], tmpindex[MAXN];
int pre[MAXN];
void preprocess()
{
    int i, j;
    for(i = 0; i <= N; ++i)
    {//考虑边界情况：1 1 2
        pre[i] = i;
        for(j = 1; j < P; ++j)
        {
            pre[i] *= i;
        }
        if(pre[i] > N)break;
    }
    if(N == pre[i])max = i;
    else max = i - 1;
    //printf("pre[max] = %d, max = %d\n", pre[max], max);
}
void DFS(int index, int Kth, int sum, int facsum)
{
    if(sum > N) return;
    else if(Kth == K)
    {
        if(sum == N && facsum > maxfacsum)
        {
            //printf("sum = %d, Kth = %d, max = %d\n", sum, Kth, max);
            maxfacsum = facsum;
            for(int i = 0; i < K; ++i)
            {
                ans[i] = tmpindex[i];
            }
        }
    }else
    {
        for(int i = index; i > 0; --i)
        {
            tmpindex[Kth] = i;
            DFS(i, Kth + 1, sum + pre[i], facsum + i);
        }
        // if (index > 0)
        // {
        //     tmpindex[Kth] = index;
        //     DFS(index, Kth + 1, sum + pre[index], facsum + index);
        //     DFS(index - 1, Kth, sum, facsum);
        // }
    }
    return;
}
main()
{
    scanf("%d%d%d", &N, &K, &P);
    preprocess();
    DFS(max, 0, 0, 0);
    if(-1 == maxfacsum)printf("Impossible\n");
    else
    {
        printf("%d = %d^%d", N, ans[0], P);
        for(int i = 1; i < K; ++i)
        {
            printf(" + %d^%d", ans[i], P);
        }
        putchar('\n');
    }
    return 0;
}